#pragma once
#include "formatter.hpp"
#include "sink.hpp"
#include "logger.hpp"

// 日志打印宏
#define debug(format, ...) debug(__FILE__, __LINE__, format, ##__VA_ARGS__)
#define info(format, ...) info(__FILE__, __LINE__, format, ##__VA_ARGS__)
#define warning(format, ...) warning(__FILE__, __LINE__, format, ##__VA_ARGS__)
#define error(format, ...) error(__FILE__, __LINE__, format, ##__VA_ARGS__)
#define fatal(format, ...) fatal(__FILE__, __LINE__, format, ##__VA_ARGS__)

namespace ns_log
{
    Logger::ptr getLogger(const std::string &logger_name)
    {
        return LoggerManager::getInstance().getLogger(logger_name);
    }

    Logger::ptr getDefaultLogger()
    {
        return LoggerManager::getInstance().default_logger();
    }
}

// 默认日志器打印宏
#define default_debug(format, ...) ns_log::getDefaultLogger()->debug(format, ##__VA_ARGS__)
#define default_info(format, ...) ns_log::getDefaultLogger()->info(format, ##__VA_ARGS__)
#define default_warning(format, ...) ns_log::getDefaultLogger()->warning(format, ##__VA_ARGS__)
#define default_error(format, ...) ns_log::getDefaultLogger()->error(format, ##__VA_ARGS__)
#define default_fatal(format, ...) ns_log::getDefaultLogger()->fatal(format, ##__VA_ARGS__)
